package main.java.br.com.projeto.domain.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import main.java.br.com.projeto.domain.entity.Cidade;

public class DaoCidade extends Dao<Cidade>{

	/**
	 * 
	 */
	private static final long serialVersionUID = -8718892838620759128L;

	public DaoCidade() {
		super(Cidade.class);
	}
	
	public List<Cidade> listByFilter(Long id, String filter) {
		
		String hql = "select cidade from Cidade cidade " +
					"left outer join cidade.estado estado " +
					"left outer join estado.pais pais " +
					"where ( (lower(cidade.cidade) like '%' || lower ( cast(:filter as string) ) || '%' or :filter = null) " +
					"			or (lower(estado.estado) like '%' || lower ( cast(:filter as string) ) || '%' or :filter = null) " +
					"			or (lower(pais.pais) like '%' || lower ( cast(:filter as string) ) || '%' or :filter = null) ) " +
					"and (cidade.id = :id or :id = 0)";
		System.out.println(hql);
		
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("filter", filter);  
		parameters.put("id", id);
		
		return this.findOneResult(hql, parameters);
	}
	
	public List<Cidade> listCidadeByQuery(String query)
	{
		String hql = "select cidade from Cidade cidade " +
				"left outer join cidade.estado estado " +
				"left outer join estado.pais pais " +
				"where (lower(cidade.cidade) like '%' || lower ( cast(:query as string) ) || '%') ";
	
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("query", query);  
		
		return this.findOneResult(hql, parameters);
	}
}
